<?php namespace Common\Model;
use Hdphp\Model\Model;
/**
 * 分类表模型
 */
Class Cate extends Model{
	//引入cate表
	protected $table = 'cate';
	/**
	 * [$validate 自动验证各种标题.]
	 * @var array
	 */
	protected $validate = array( 
		// 自动验证类型名是否为空，要是为空的话则进行获取错误提醒(必填项)
		array('cname','required','分类名称不能为空',3,3),
		array('type_tid','require','所属类型不能为空',3,3),
	);
	/**
	 * [cateAdd 添加父级分类]
	 * @return [type] [description]
	 */
	public function cateAdd(){
		// p(Q('post.'));
		if(!$this->create()){
			//有个bug  就是不能判断type_tid 的值为空(即出现'请选择类型')的时候报错???
			$this->error();
			return false;
		}
		$this->add();
		return true;
	}
	/**
	 * [addSon 添加子分类方法]
	 */
	public function addSon(){
		// p(Q('post.'));获取到数据
		// Array
		// (
		//     [cname] => 上衣
		//     [pid] => 7
		//     [type_tid] => 12
		//     [csort] => 100
		// )
		if($this->create()){
			$this->add();
			return true;
		}
		return false;
	}

	/**
	 * [edit 修改分类]
	 * @return [type] [description]
	 */
	public function edit(){
		// p(Q('post.'));
		if($this->create()){
			$this->save();
			return true;
		}
		return false;
	}


	/**
	 * [getNoMy 获取当前所属分类的所有数据，除了自己和自己的子集]
	 * @param  [type] $cid [传参，编辑当前数据的cid]
	 * @return [type]      [description]
	 */
	public function getNoMy($cid){
		$data = $this->get();
		// p($data);//获取到所有当前cate表里的所有数据，并打印出来，另存为数据分析下的'cate';
		//2、在数据中获得自己和自己的子集
		//a、获得子集
		$cids = $this->getSon($data,$cid);//========>在$data 所有数据中获得符合$cid的数据(层级下面也有的子集关系，采用递归函数解决)
		// p($cids);点击'上衣'的时候获取的数据
		// Array
		// (
		//     [0] => 12
		//     [1] => 15
		//     [2] => 13
		//     [3] => 14
		// )获取没问题
		// 3、再将自己也给压入到当前数组中
		$cids[] = $cid;
		// p($cids);
		// die;
		// p($cids);得到条件，接下来进行排除工作(获取数据库中的数据，但得到的数据是不在上面条件下的)
		// 采用条件 where("cid not in (10,12,13,14,15)");
		// 将获得的排除条件进行数组的解拆，拆分为字符串
		// $dd = implode(',',$cids);======>12,15,13,14,10
		// p($dd);
		$result = $this->where(" cid not in(".implode(',',$cids). ")" )->get();
		// p($result);//完美得到排除后的数据
		// die;
		// 进行树状图的处理
		$result = Data::tree($result,'cname');
		// p($result);die;
		return $result;

	}


	public function getSon($data,$cid){
		$temp = array();
		foreach ($data as $v) {
			// 数据分析
			// Array
			// (
			//     [3] => Array
			//         (
			//             [cid] => 10
			//             [cname] => 上衣
			//             [pid] => 7
			//             [csort] => 100
			//             [type_tid] => 12
			//         )
			//     [5] => Array
			//         (
			//             [cid] => 12
			//             [cname] => 呢绒大衣
			//             [pid] => 10
			//             [csort] => 100
			//             [type_tid] => 12
			//         )
			//     [8] => Array
			//         (
			//             [cid] => 15
			//             [cname] => 长袖
			//             [pid] => 12
			//             [csort] => 100
			//             [type_tid] => 12
			//         )
			// )
			// 当我点击cid=10 的时候，找到pid=10的数组，并找到pid=10所对应的cid，得到cid=12，在继续找pid=12的的数据，找到pid=12所对应的cid，得到cid=15，并将其压入到临时数组中，以此类推，继续查找子集的子集数据.
			if($v['pid']==$cid){  //如果遍历底下的pid==点击当前是获取的cid值
				$temp[]=$v['cid'];//满足上面条件的时候，将得到的cid值给压入到临时数组中，这儿值接收cid，不用接收整个数组
				$temp = array_merge($temp,$this->getSon($data, $v['cid']));//合并数组，并继续执行函数。满足一个条件就将其压入到temp中，并在后期给合并到$temp中
			}
		}
		return $temp;//最后还得将其返出该函数
	}
	// /**
	//  * [del 分类列表的删除model]
	//  * @return [type] [description]
	//  */
	// public function del($cid){
	// 	// p($cid);
	// 	// 1、先判断该删除项下面是否还有元素，若有元素则返回假，出现提示信息，提醒：请先删除子类分类。
	// 	$data = $this->get();
	// 	// p($data);//获取所有数据，另存为数据分析下的'cate';
	// 	$cids = $this->getRe($data,$cid);

	// }
	/**
	 * [getRe del方法中需要返回true或false的值方法]
	 * @return [type] [description]
	 */
	public function getRe($data,$cid){
		// p($data);die;
		foreach ($data as $v) {//循环所有数据，进行筛选
			if($v['pid']==$cid){   //当执行到这儿 的时候，说明存在子集，即返回false进行报错
				$this->error = '请先删除该分类的子类';
				return false;
			}
		}
		//到了这儿证明上面的数据不符合条件，也就是说没有子集，即可以进行删除.
		$this->where(array('cid'=>$cid))->delete();
		return true;
	}
}

?>